package javase2.day06.demo09;

import java.util.concurrent.locks.ReentrantLock;

public class RunnableImpl implements Runnable {
    //票源
    private int ticket=100;
    ReentrantLock lk=new ReentrantLock();
    @Override
    public void run() {
        //这种加了finally的不知为什么无法终止死循可能和lock();获取锁 unlock();释放锁两个方法有关
//        while (true){
//            lk.lock();
//            if (ticket>0){
//                //为了提高出现安全问题的概率，让程序休眠一会
//                try {
//                    Thread.sleep(10);
//                    System.out.println(Thread.currentThread().getName()+"正在卖第"+ticket+"张票");
//                    ticket--;
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }finally {
//                    lk.unlock();//无论程序是否异常，都会把锁释放掉
//                }
//            }
//            //跳出死循环
//            if (ticket==0){
//                break;
//            }
//        }
        while (true){
            lk.lock();
            if (ticket>0){
                //为了提高出现安全问题的概率，让程序休眠一会
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"正在卖第"+ticket+"张票");
                ticket--;
            }
            lk.unlock();
            //跳出死循环
            if (ticket==0){
                break;
            }
        }
    }
}
